Class templates can be explicitly or partially specialized. But according to the C++ standard, function templates cannot be partially specialized.
Under certain conditions, the Microsoft® compiler will silently ignore the confusing application of partial specialization syntax to a function, but
other compilers will raise an error for it and fail compilation.
Noncompliant code example
template<typename T>
void fun(T p);
template<typename T>
void fun<T>(T p) { // Noncompliant
// ...
}
Compliant solution
template<typename T>
void fun(T p);
template<typename T>
void fun(T p) {
// ...
}